package com.cy.store.controller;

import com.cy.store.controller.ex.*;
import com.cy.store.service.ex.*;
import com.cy.store.util.JsonResults;
import org.springframework.web.bind.annotation.ExceptionHandler;

import javax.servlet.http.HttpSession;
import java.io.Serializable;

/**
 * 控制类的基类
 */
public class BaseController  {

    //响应成功的状态码
    public static final int OK = 200;

    //当前项目产生异常，被统一拦截到该方法，该方法此时就充当异常处理方法，方法的返回值返回给前端
    @ExceptionHandler({ServiceException.class,FileUploadException.class})//用来统一处理异常,需要列出拦截的异常类
    public JsonResults<Void> ExceptionHandler(Throwable e){
        JsonResults jsonResults = new JsonResults(e);
        if(e instanceof UsernameDuplicatedException){
            jsonResults.setState(500);
            jsonResults.setMessage("用户名被占用！！！");
        } else if(e instanceof PasswordWrongException){
            jsonResults.setState(501);
            jsonResults.setMessage("用户密码错误！");
        } else if(e instanceof UserIsNotExistException){
            jsonResults.setState(502);
            jsonResults.setMessage("用户不存在！");
        } else if(e instanceof InsertException){
            jsonResults.setState(503);
            jsonResults.setMessage("用户注册过程中发生数据插入异常！");
        } else if(e instanceof NewAndOldPasswordNotSameException){
            jsonResults.setState(504);
            jsonResults.setMessage("用户密码与输入密码不一致！");
        } else if(e instanceof ChangePasswordException){
            jsonResults.setState(505);
            jsonResults.setMessage("修改密码时发生异常！");
        } else if(e instanceof UpdateException){
            jsonResults.setState(506);
            jsonResults.setMessage("更新过程中发生异常！");
        }else if(e instanceof FileEmptyException){
            jsonResults.setState(601);
            jsonResults.setMessage("文件为空！");
        } else if(e instanceof FileSizeException){
            jsonResults.setState(602);
            jsonResults.setMessage("文件大小超出限制！");
        } else if(e instanceof FileStateException){
            jsonResults.setState(603);
            jsonResults.setMessage("文件状态不正常！");
        } else if(e instanceof FileTypeException){
            jsonResults.setState(604);
            jsonResults.setMessage("文件类型不正确！");
        } else if(e instanceof FileUploadIOException){
            jsonResults.setState(506);
            jsonResults.setMessage("文件上传过程中发生IO异常！");
        } else if(e instanceof AddressCountLimitException) {
            jsonResults.setState(601);
            jsonResults.setMessage("收货地址已达到最大限制！");
        } else if (e instanceof AddressNotFoundException){
            jsonResults.setState(602);
            jsonResults.setMessage("收货地址不存在！");
        } else if (e instanceof AccessDeniedException) {
            jsonResults.setState(603);
            jsonResults.setMessage("访问权限受限异常！");
        } else if (e instanceof DeleteException) {
            jsonResults.setState(701);
            jsonResults.setMessage("删除过程中发生异常！");
        } else if (e instanceof ProductNotExistException) {
            jsonResults.setState(801);
            jsonResults.setMessage("商品信息不存在！");
        } else if (e instanceof CartNotExistException) {
            jsonResults.setState(802);
            jsonResults.setMessage("购物车信息不存在！");
        } else if (e instanceof NoSettleProductException) {
            jsonResults.setState(803);
            jsonResults.setMessage("无可结算商品！");
        }

        return jsonResults;
    }

    /**
     * 获取Session对象中的uid字段。该方法封装在父类中
     * @param httpSession
     * @return
     */
    protected final Integer getuidFromSession(HttpSession httpSession){
         return Integer.valueOf(httpSession.getAttribute("uid").toString());
    }

    /**
     * 获取Session对象中的username字段。
     * @param httpSession
     * @return
     */
    protected  final  String getUsernameFromSession(HttpSession httpSession){
        return httpSession.getAttribute("username").toString();
    }

}
